package com.gradumate.client.gui.formulier;

import java.util.logging.Logger;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.gradumate.client.Element;
import com.gradumate.client.GraduMate;
import com.gradumate.client.service.GraduMateService;
import com.gradumate.client.service.GraduMateServiceAsync;
import com.gradumate.shared.FormulierInfo;
import com.gradumate.shared.Gebruiker;

/**
 * 
 * @author IJsbrand
 *
 */
public class TabBevestiging {
	
	@SuppressWarnings("unused")
	private AfstudeerVoorstelIndienen tp;
	private Gebruiker gebruiker;
	private Element e = new Element();
	
	// Logger
	private static final Logger log = Logger.getLogger(AfstudeerVoorstelIndienen.class.getName());

	static GraduMateServiceAsync serverService = GWT.create(GraduMateService.class);
	
	private Label lblBedrijfsnaam1;
	private Label lblVoertaal1;
	private Label lblGebouw1;
	private Label lblStraatnaam1;
	private Label lblHuisnummer1;
	private Label lblPostcode1;
	private Label lblPlaats1;
	private Label lblWebsite1;
	private Label lblExtrainfo1;
	private Label lblAantalwerknemers1;
	private Label lblStartdatum1;
	private Label lblEinddatum1;
	private Label lblOnderwerp1;
	private Label lblMaxstudenten1;
	private Label lblVergoeding1;
    private Label lblType1;
    
    private Button btnSubmit;
	
	private int row;
	private FileUpload file;
	
	public TabBevestiging(AfstudeerVoorstelIndienen tp, Gebruiker gebruiker) {
		this.tp = tp;
		this.gebruiker = gebruiker;
	}

	/**
	 * Deze methode bevat alles wat te maken heeft met de laatste tab: <br>
	 * - alle visuele onderdelen zoals (statische en dynamische) labels en buttons<br>
	 * - ClickHandler voor de afhandeling van het click event van de button "opslaan". Indien geselecteerd zal de ClickHandler aangeroepen worden.<br>
	 *   Deze zal controleren of alle informatie correct is ingevuld van alle voorgaande tabs.<br>
	 *   
	 * @return De complete tab. Deze bestaat uit een FlexTable waarin alle widgets van de tab zitten.
	 */
	public Widget getTabBevestiging() {
		Label lblBedrijfsnaam = new Label("Bedrijfsnaam:");
		lblBedrijfsnaam.setStyleName("vetgedrukt");
		lblBedrijfsnaam1 = new Label("-");

		Label lblVoertaal = new Label("Voertaal:");
		lblVoertaal.setStyleName("vetgedrukt");
		lblVoertaal1 = new Label("-");

		Label lblGebouw = new Label("Gebouw:");
		lblGebouw.setStyleName("vetgedrukt");
		lblGebouw1 = new Label("-");

		Label lblStraatnaam = new Label("Straatnaam:");
		lblStraatnaam.setStyleName("vetgedrukt");
		lblStraatnaam1 = new Label("-");

		Label lblHuisnummer = new Label("Huisnummer:");
		lblHuisnummer.setStyleName("vetgedrukt");
		lblHuisnummer1 = new Label("-");

		Label lblPostcode = new Label("Postcode:");
		lblPostcode.setStyleName("vetgedrukt");
		lblPostcode1 = new Label("-");

		Label lblPlaats = new Label("Plaats:");
		lblPlaats.setStyleName("vetgedrukt");
		lblPlaats1 = new Label("-");

		Label lblWebsite = new Label("Website:");
		lblWebsite.setStyleName("vetgedrukt");
		lblWebsite1 = new Label("-");

		Label lblExtrainfo = new Label("Extra info:");
		lblExtrainfo.setStyleName("vetgedrukt");
		lblExtrainfo1 = new Label("-");

		Label lblAantalwerknemers = new Label("Aantal werknemers:");
		lblAantalwerknemers.setStyleName("vetgedrukt");
		lblAantalwerknemers1 = new Label("-");

		Label lblStartdatum = new Label("Startdatum:");
		lblStartdatum.setStyleName("vetgedrukt");
		lblStartdatum1 = new Label("-");

		Label lblEinddatum = new Label("Einddatum:");
		lblEinddatum.setStyleName("vetgedrukt");
		lblEinddatum1 = new Label("-");

		Label lblOnderwerp = new Label("Onderwerp:");
		lblOnderwerp.setStyleName("vetgedrukt");
		lblOnderwerp1 = new Label("-");

		Label lblMaxstudenten = new Label("Max aantal studenten te plaatsen:");
		lblMaxstudenten.setStyleName("vetgedrukt");
		lblMaxstudenten1 = new Label("-");

		Label lblVergoeding = new Label("Bruto vergoeding:");
		lblVergoeding.setStyleName("vetgedrukt");
		lblVergoeding1 = new Label("-");

		file = new FileUpload();
		file.setName("file");

		Label lblType = new Label("Type praktijkopdracht:");
		lblType.setStyleName("vetgedrukt");
		lblType1 = new Label("-");

		btnSubmit = e.getOpslaanButton();

		final Hidden caHidPad = new Hidden("email", GraduMate.getGebruiker().getGebruikerEmail());

		VerticalPanel holder = new VerticalPanel();
		holder.setSpacing(0);
		holder.add(caHidPad);
		holder.add(file);
		for(int i=0; i<3 ; i++){
			holder.add(e.getSpacer());
		}
		holder.add(btnSubmit);

		final FormPanel form = new FormPanel();
		form.setEncoding(FormPanel.ENCODING_MULTIPART);
		form.setMethod(FormPanel.METHOD_POST);
		form.setAction(GWT.getHostPageBaseURL() + "gradumate/VoorstelAfhandelingServlet");
		form.add(holder);

		FlexTable flxFormPanel = new FlexTable();
		flxFormPanel.setCellPadding(0);
		flxFormPanel.setCellSpacing(3);
		flxFormPanel.setWidget(row, 0, form);

		CaptionPanel cpForm = new CaptionPanel("");
		cpForm.add(flxFormPanel);
		
		form.addSubmitHandler(new SubmitHandler(){
			public void onSubmit(SubmitEvent event) {
			}
		});
		
		form.addSubmitCompleteHandler(new SubmitCompleteHandler(){
			public void onSubmitComplete(SubmitCompleteEvent event) {
				RootPanel.get("main").clear();
				RootPanel.get("tabpanel").clear();
				
				GraduMate.addSuccessMsg("Uw voorstel is succesvol opgeslagen");
			}
		});
		
		row = 0;
		FlexTable flxOverzichtHeader = new FlexTable();
		flxOverzichtHeader.setCellPadding(0);
		flxOverzichtHeader.setCellSpacing(3);
		flxOverzichtHeader.setWidget(row, 0,e.getAfstudeerVoorstelIndienenHeader());

		row = 0;
		FlexTable flxOverzichtContent = new FlexTable();
		flxOverzichtContent.setCellPadding(0);
		flxOverzichtContent.setCellSpacing(3);
		flxOverzichtContent.setWidget(row, 0, lblBedrijfsnaam);
		flxOverzichtContent.setWidget(row, 1, lblBedrijfsnaam1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblVoertaal);
		flxOverzichtContent.setWidget(row, 1, lblVoertaal1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblGebouw);
		flxOverzichtContent.setWidget(row, 1, lblGebouw1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblStraatnaam);
		flxOverzichtContent.setWidget(row, 1, lblStraatnaam1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblHuisnummer);
		flxOverzichtContent.setWidget(row, 1, lblHuisnummer1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblPostcode);
		flxOverzichtContent.setWidget(row, 1, lblPostcode1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblPlaats);
		flxOverzichtContent.setWidget(row, 1, lblPlaats1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblWebsite);
		flxOverzichtContent.setWidget(row, 1, lblWebsite1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblExtrainfo);
		flxOverzichtContent.setWidget(row, 1, lblExtrainfo1);
		row++;
		flxOverzichtContent.setWidget(row, 0, lblAantalwerknemers);
		flxOverzichtContent.setWidget(row, 1, lblAantalwerknemers1);

		CaptionPanel cpOverzicht = new CaptionPanel("Overzicht organisatie");
		cpOverzicht.add(flxOverzichtContent);

		row = 0;
		FlexTable flxOverzichtContent2 = new FlexTable();
		flxOverzichtContent2.setCellPadding(0);
		flxOverzichtContent2.setCellSpacing(3);
		flxOverzichtContent2.setWidget(row, 0, lblStartdatum);
		flxOverzichtContent2.setWidget(row, 1, lblStartdatum1);
		row++;
		flxOverzichtContent2.setWidget(row, 0, lblEinddatum);
		flxOverzichtContent2.setWidget(row, 1, lblEinddatum1);
		row++;
		flxOverzichtContent2.setWidget(row, 0, lblOnderwerp);
		flxOverzichtContent2.setWidget(row, 1, lblOnderwerp1);
		row++;
		flxOverzichtContent2.setWidget(row, 0, lblMaxstudenten);
		flxOverzichtContent2.setWidget(row, 1, lblMaxstudenten1);
		row++;
		flxOverzichtContent2.setWidget(row, 0, lblVergoeding);
		flxOverzichtContent2.setWidget(row, 1, lblVergoeding1);
		row++;
		flxOverzichtContent2.setWidget(row, 0, lblType);
		flxOverzichtContent2.setWidget(row, 1, lblType1);

		CaptionPanel cpOverzichtSpecificaties = new CaptionPanel("Overzicht opdracht specificaties");
		cpOverzichtSpecificaties.add(flxOverzichtContent2);
		
		btnSubmit.addClickHandler(new ClickHandler(){
			public void onClick(ClickEvent event) {
				form.submit();
				
				FormulierInfo formulier = new FormulierInfo();
				//Alle informatie setten
				formulier.setBedrijfsnaam(lblBedrijfsnaam1.getText());
				formulier.setVoertaal(lblVoertaal1.getText());
				formulier.setGebouw(lblGebouw1.getText());
				formulier.setStraatnaam(lblStraatnaam1.getText());
				formulier.setHuisnummer(lblHuisnummer1.getText());
				formulier.setPostcode(lblPostcode1.getText());
				formulier.setPlaats(lblPlaats1.getText());
				formulier.setWebsite(lblWebsite1.getText());
				formulier.setExtrainfo(lblExtrainfo1.getText());
				formulier.setAantalwerknemers(lblAantalwerknemers1.getText());
				formulier.setStartdatum(lblStartdatum1.getText());
				formulier.setEinddatum(lblEinddatum1.getText());
				formulier.setOnderwerp(lblOnderwerp1.getText());
				formulier.setMaxstudenten(lblMaxstudenten1.getText());
				formulier.setVergoeding(lblVergoeding1.getText());
			    formulier.setType(lblType1.getText());
			    //formulier.setStudentEmail(gebruiker.getEmailnfdsjknfkjdsnkjsnfjkdsn)
			    formulier.setStudentEmail("ijsbrandvanprattenburg@student.hu.nl");
				//Aan de server kant het object persistent maken
				serverService.setFormulier(formulier, new AsyncCallback<FormulierInfo>(){
					public void onFailure(Throwable caught) {
						GraduMate.addErrorMsg("Er ging iets fout met het plaatsen van het document. Probeer het later opnieuw,");
					}
					public void onSuccess(FormulierInfo result) {
						log.info("Formulier is opgeslagen");
					}
				});
			}
		});
		
//		row = 0;
//		FlexTable flxOverzichtFooter = new FlexTable();
//		flxOverzichtFooter.setCellPadding(0);
//		flxOverzichtFooter.setCellSpacing(3);
//		flxOverzichtFooter.setWidget(row, 0, btnSubmit);

		row = 0;
		FlexTable flxOverzicht = new FlexTable();
		flxOverzicht.setCellPadding(0);
		flxOverzicht.setCellSpacing(3);
		flxOverzicht.setWidget(row, 0, flxOverzichtHeader);
		row++;
		flxOverzicht.setWidget(row, 0, cpOverzicht);
		row++;
		flxOverzicht.setWidget(row, 0, cpOverzichtSpecificaties);
		row++;
		flxOverzicht.setWidget(row, 0, cpForm);
		//row++;
		//flxOverzicht.setWidget(row, 0, flxOverzichtFooter);

		return flxOverzicht;
	}

	public void setLabel(String labelNaam, String s){
		if(labelNaam.equals("tabOverzichtlblBedrijfsnaam1")){lblBedrijfsnaam1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblVoertaal1")){lblVoertaal1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblGebouw1")){lblGebouw1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblStraatnaam1")){lblStraatnaam1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblHuisnummer1")){lblHuisnummer1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblPostcode1")){lblPostcode1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblPlaats1")){lblPlaats1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblWebsite1")){lblWebsite1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblExtrainfo1")){lblExtrainfo1.setText(s);}
		if(labelNaam.equals("tabOverzichtlblAantalwerknemers1")){lblAantalwerknemers1.setText(s);}
		if(labelNaam.equals("lblStartdatum1")){lblStartdatum1.setText(s);}
		if(labelNaam.equals("lblEinddatum1")){lblEinddatum1.setText(s);}
		if(labelNaam.equals("lblOnderwerp1")){lblOnderwerp1.setText(s);}
		if(labelNaam.equals("lblMaxstudenten1")){lblMaxstudenten1.setText(s);}
		if(labelNaam.equals("lblVergoeding1")){lblVergoeding1.setText(s);}
		if(labelNaam.equals("lblType1")){lblType1.setText(s);}
	}
	
	/**
	 * Plaatje op de Save button plaatsen, leuke feature.
	 * @param show
	 */
	private void setButtonLoadingImage(boolean show) {
		if (show) {
			btnSubmit.setHTML("Opslaan.. " + e.getImage("Opslaan..", "ajax-loader.gif").toString());
		} else {
			btnSubmit.setHTML("Opslaan " + e.getImage("Opslaan..", "user_add.png").toString());
		}
	}
}
